package com.yilin.tms.capital.commons.pab;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yilin.tms.core.commons.base.BaseEntity;
import java.util.Date;

public class PabTradeRecord extends BaseEntity {

    public enum PabTradeType {
        platPayment(0, "支付"),
        pubCollection(1, "收款");
        @EnumValue
        public Integer index;
        public String name;

        PabTradeType(Integer index, String name) {
            this.index = index;
            this.name = name;
        }
    }

    public enum PabTradeStatus {
        create(0, "创建"),
        success(1, "交易成功"),
        fail(2, "交易失败"),
        handle(3, "处理中");
        @EnumValue
        public Integer index;
        public String name;

        PabTradeStatus(Integer index, String name) {
            this.index = index;
            this.name = name;
        }
    }

    private String tradeNo;//本地流水号
    private String batchNo;//批次单号
    private PabTradeType pabTradeType;//交易类型
    private PabTradeStatus pabTradeStatus;//交易状态

    //发送时数据
    private String outOrganizeId;//付款人[平台]组织ID
    private String outAcctBankNode;//付款人开户行行号
    private String outAcctBankName;//付款人开户行名称
    private String outAcctNo;//付款人账户*
    private String outAcctName;//付款人名称*
    private String outAcctAddr;//付款人地址
    //-------------------------------------
    private String inOrganizeId;//收款人[平台]组织ID
    private String inAcctBankNode;//收款人开户行行号 跨行转账建议必输
    private String inAcctNo;//收款人账户 *
    private String inAcctName;//收款人账户户名 *
    private Boolean unionFlag;//跨行 true
    private String inAcctBankName;//收款人开户行名称  * 【跨行建议】
    private String inAcctProvinceCode;//收款账户银行开户省代码或省名称 【跨行建议】
    private String inAcctCityName;//收款账户开户城市名称 【跨行建议】
    private Double tranAmount;//转出金额  *

    private String bankFlowNo;//银行流水号（银行/第三方)

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date initiateTime;//发起时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date completeTime;//完成时间

    private Boolean notifiedYilin;//是否已通知主服务器
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date notifyTime;//通知时间

    private Integer syncTaskCount = 0;//自动任务次数

    // 查询字段
    private String outBankShortName;// 转出行
    private String inBankShortName;// 转入行


    public String getTradeNo() {
        return tradeNo;
    }

    public void setTradeNo(String tradeNo) {
        this.tradeNo = tradeNo;
    }

    public String getBatchNo() {
        return batchNo;
    }

    public void setBatchNo(String batchNo) {
        this.batchNo = batchNo;
    }

    public PabTradeType getPabTradeType() {
        return pabTradeType;
    }

    public void setPabTradeType(PabTradeType pabTradeType) {
        this.pabTradeType = pabTradeType;
    }

    public PabTradeStatus getPabTradeStatus() {
        return pabTradeStatus;
    }

    public void setPabTradeStatus(PabTradeStatus pabTradeStatus) {
        this.pabTradeStatus = pabTradeStatus;
    }

    public String getOutOrganizeId() {
        return outOrganizeId;
    }

    public void setOutOrganizeId(String outOrganizeId) {
        this.outOrganizeId = outOrganizeId;
    }

    public String getOutAcctBankNode() {
        return outAcctBankNode;
    }

    public void setOutAcctBankNode(String outAcctBankNode) {
        this.outAcctBankNode = outAcctBankNode;
    }

    public String getOutAcctBankName() {
        return outAcctBankName;
    }

    public void setOutAcctBankName(String outAcctBankName) {
        this.outAcctBankName = outAcctBankName;
    }

    public String getOutAcctNo() {
        return outAcctNo;
    }

    public void setOutAcctNo(String outAcctNo) {
        this.outAcctNo = outAcctNo;
    }

    public String getOutAcctName() {
        return outAcctName;
    }

    public void setOutAcctName(String outAcctName) {
        this.outAcctName = outAcctName;
    }

    public String getOutAcctAddr() {
        return outAcctAddr;
    }

    public void setOutAcctAddr(String outAcctAddr) {
        this.outAcctAddr = outAcctAddr;
    }

    public String getInOrganizeId() {
        return inOrganizeId;
    }

    public void setInOrganizeId(String inOrganizeId) {
        this.inOrganizeId = inOrganizeId;
    }

    public String getInAcctBankNode() {
        return inAcctBankNode;
    }

    public void setInAcctBankNode(String inAcctBankNode) {
        this.inAcctBankNode = inAcctBankNode;
    }

    public String getInAcctNo() {
        return inAcctNo;
    }

    public void setInAcctNo(String inAcctNo) {
        this.inAcctNo = inAcctNo;
    }

    public String getInAcctName() {
        return inAcctName;
    }

    public void setInAcctName(String inAcctName) {
        this.inAcctName = inAcctName;
    }

    public Boolean getUnionFlag() {
        return unionFlag;
    }

    public void setUnionFlag(Boolean unionFlag) {
        this.unionFlag = unionFlag;
    }

    public String getInAcctBankName() {
        return inAcctBankName;
    }

    public void setInAcctBankName(String inAcctBankName) {
        this.inAcctBankName = inAcctBankName;
    }

    public String getInAcctProvinceCode() {
        return inAcctProvinceCode;
    }

    public void setInAcctProvinceCode(String inAcctProvinceCode) {
        this.inAcctProvinceCode = inAcctProvinceCode;
    }

    public String getInAcctCityName() {
        return inAcctCityName;
    }

    public void setInAcctCityName(String inAcctCityName) {
        this.inAcctCityName = inAcctCityName;
    }

    public Double getTranAmount() {
        return tranAmount;
    }

    public void setTranAmount(Double tranAmount) {
        this.tranAmount = tranAmount;
    }

    public String getBankFlowNo() {
        return bankFlowNo;
    }

    public void setBankFlowNo(String bankFlowNo) {
        this.bankFlowNo = bankFlowNo;
    }

    public Date getInitiateTime() {
        return initiateTime;
    }

    public void setInitiateTime(Date initiateTime) {
        this.initiateTime = initiateTime;
    }

    public Date getCompleteTime() {
        return completeTime;
    }

    public void setCompleteTime(Date completeTime) {
        this.completeTime = completeTime;
    }

    public Boolean getNotifiedYilin() {
        return notifiedYilin;
    }

    public void setNotifiedYilin(Boolean notifiedYilin) {
        this.notifiedYilin = notifiedYilin;
    }

    public Date getNotifyTime() {
        return notifyTime;
    }

    public void setNotifyTime(Date notifyTime) {
        this.notifyTime = notifyTime;
    }

    public Integer getSyncTaskCount() {
        return syncTaskCount;
    }

    public void setSyncTaskCount(Integer syncTaskCount) {
        this.syncTaskCount = syncTaskCount;
    }

    public String getOutBankShortName() {
        return outBankShortName;
    }

    public void setOutBankShortName(String outBankShortName) {
        this.outBankShortName = outBankShortName;
    }

    public String getInBankShortName() {
        return inBankShortName;
    }

    public void setInBankShortName(String inBankShortName) {
        this.inBankShortName = inBankShortName;
    }
}
